package modelo;

import java.util.Observable;
import excepciones.XMLUnserializeException;
import extras.xml.NumericAttribute;
import extras.xml.SerializableXML;
import modelo.Auto;
import org.jdom.Element;

public class Jugador extends Observable implements SerializableXML<Element> {
	
	/**
	 * El jugador tiene un nombre que lo identifica
	 */
	private String nombre;
	
	/**
	 * Su auto con el que correra las carreras
	 */
	private Auto auto;

	/**
	 * constructor 
	 */
	public Jugador(String nombre, Auto auto){
		this.nombre = nombre;
		this.auto = auto;	
	}
	
	/**
	 * Se crea un jugador a partir del elemento xml recibido.
	 * @param xmlElement elemento xml que representa al jugador
	 * @throws XMLUnserializeException si alguno de los valores del 
	 */
	public Jugador(Element xmlElement) throws XMLUnserializeException {
		this.nombre = xmlElement.getAttributeValue("nombre");
		this.auto = new Auto(xmlElement.getChild("auto"));
	}
	
	/**
	 * Devuelve un elemento xml que representa al jugador.
	 * @return elemento xml que representa al jugador
	 */
	public Element toXML() {
		Element xmlElement = new Element("jugador");
		xmlElement.setAttribute("nombre", nombre);
		xmlElement.addContent(auto.toXML());
		return xmlElement;
	}	
	
	/**
	 * Devuelve el nombre del jugador.
	 * @return nombre del jugador
	 */
	public String getNombre(){
		return this.nombre;
	}
	
	/**
	 * Devuelve el auto del jugador.
	 * @return auto del jugador
	 */
	public Auto getAuto(){
		return this.auto;
	}
	
	/**
	 * Actualiza los diferentes observadores del jugador.
	 */
	protected void actualizarObservadores() {
		setChanged();
		notifyObservers();
	}


	public void setNombre(String nombre) {
		this.nombre = nombre;
		actualizarObservadores();
	}

	public void setAuto(Auto auto) {
		this.auto = auto;
		actualizarObservadores();
	}
}

	

